package com.mastercard.assets.web.robot;

import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.List;
import java.util.TimerTask;

import com.mastercard.assets.jpa.TblAlerta;
import com.mastercard.assets.jpa.TblAsset;
import com.mastercard.assets.jpa.TblFormaAlarma;
import com.mastercard.assets.jpa.TblTarea;
import com.mastercard.assets.jpa.TblTareaPreimplementacion;
import com.mastercard.assets.util.MCUtil;
import com.mastercard.assets.util.dao.MasterCardDAO;

public class MasterCardHourRobot
	extends
		TimerTask
{
	private static int counter = 1 ;

	@Override
	public void run( )
	{
		System.out.println( "Ejecucion #" + counter++ ) ;
		
		// toma la hora y la fecha
		GregorianCalendar gc = new GregorianCalendar( ) ;
		
		// toma hora, dia, mes y anio
		int hour = gc.get( Calendar.HOUR_OF_DAY ) ;
		int dia = gc.get( Calendar.DATE ) ;
		int month = gc.get( Calendar.MONTH ) + 1 ;
		int year = gc.get( Calendar.YEAR ) ;
		
		System.out.println( "Robot ejecutandose en " + dia + "/" + month + "/" + year + ":" + hour ) ;
		
		// toma las tareas de la tabla tbl_tarea_preimplementacion que no estan ejecutadas todavia
		List< TblTareaPreimplementacion > tareasPendientes = MasterCardDAO.findAllWorksNotExecuted( ) ;
		MasterCardDAO.closeEntityManager( ) ;
                
		// recorre todas las tareas
		for( TblTareaPreimplementacion tareaPendiente : tareasPendientes )
		{
			if( tareaPendiente == null )
				continue ;
			
			// toma la tarea
			TblTarea tarea = tareaPendiente.getTblTarea( ) ;
			
			// si esta en null
			if( tarea == null )
				// siguiente
				continue ;
			
			TblAsset asset = tareaPendiente.getTblAsset( ) ;
			
			if( asset == null || asset.getStatus( ) == 0 )
				continue ;
			
			// toma las alarmas
			List< TblFormaAlarma > alarmas = tarea.getTblFormaAlarmas( ) ;
			
			if( alarmas == null )
				continue ;
			
			// recorre las alarmas
			for( TblFormaAlarma al : alarmas )
			{
				if( al == null )
					continue ;
				
				// toma la alerta
				TblAlerta alerta = al.getTblAlerta( ) ;
				
				if( alerta == null )
					continue ;
				
				// toma el texto
				String texto = alerta.getTexto( ) ;
				
				if( asset != null )
					texto = texto.replaceAll( "<nombre_asset>" , asset.getNombre( ) ) ;
				
				// toma el tipo de despliegue
				int tipoDespliegue = al.getTipo( ) ;
				
				// en caso de que sea 1 (correo) o 3(ambos)
				if( tipoDespliegue == 1 || tipoDespliegue == 3 )
				{
					// toma la alerta
					// manda correo
//					MCUtil.sendMail( al.get , subject, message)
				}
			}
		}
	}

}
